package main

import (
	"fmt"
	"strconv"
)

func main() {
	//转换建议地位转换成高位 ，如果 地位转高位  可能会存在数据不准   int-> float
	var a int8 = 20
	var b int16 = 80
	fmt.Println(int16(a) + b) //不同种类型需要先转成同一类型  低转高

	var f1 float32 = 1.23456789
	var f2 float64 = 1.23456789
	fmt.Println(float64(f1) + f2) //情况一样

	fmt.Println(float64(a) + f2)

	//其它类型转string
	var i int = 20
	var f float64 = 3.14
	var t bool = false
	var be byte = 'a'
	//1、strings.Sprint 转换
	str1 := fmt.Sprintf("%d", i)
	str2 := fmt.Sprintf("%f", f)
	str3 := fmt.Sprintf("%t", t)
	str4 := fmt.Sprintf("%c", be)
	fmt.Printf("值：%v,类型：%T\n", str1, str1)  //值：20,类型：string
	fmt.Printf("值：%v,类型：%T\n", str2, str2)  //值：3.140000,类型：string
	fmt.Printf("值：%v,类型：%T\n", str3, str3)  //值：false,类型：string
	fmt.Printf("值：%v ,类型：%T\n", str4, str4) //值：a ,类型：string

	//2、通过strconv转换
	str5 := strconv.FormatInt(int64(i), 10)             // 默认结束 int64类型
	str6 := strconv.FormatFloat(float64(f), 'f', 2, 64) //接受四个参数  1-变量 2-格式化类型 3-保留小数点 4-格式化类型
	str7 := strconv.FormatBool(t)
	str8 := strconv.FormatUint(uint64(be), 10)
	fmt.Printf("值：%v,类型：%T\n", str5, str5) //值：20,类型：string
	fmt.Printf("值：%v,类型：%T\n", str6, str6) //值：3.14,类型：string
	fmt.Printf("值：%v,类型：%T\n", str7, str7) //值：false,类型：string
	fmt.Printf("值：%v,类型：%T\n", str8, str8) //值：97,类型：string

}
